All code, data, and other necessary files needed to reproduce these analyses and figures can be found on my CaribbeanSST GitHub repository. Dropbox links are also provided for large files (netCDF/shape) for download within the Rmarkdown code
Figure 1 | Map of reefs included in SST analyses specific to reef locations. Reef shape files were obtained from the UN Environment World Conservation Monitoring Centre.
847 reef shape files were obtained from the UN Environment World Conservation Monitoring Centre database (Figure 1) and used to extract SST from both the HadISST and Pathfinder datasets. Each reef polygon was used to extract the weighted mean SST per raster layer (i.e., monthly layers in HadISST or daily in Pathfinder). Several reef polygons could not be used to extract SST as polygons, so the GPS coordinates that made up the points of the polygons were used to extract SST that corresponded to that point. Those SSTs were then averaged across each polygon to result in a single SST mean for the polygon. Thus, each of the 847 reef polygons were assigned a mean SST per sampling frequency of each SST dataset.
A custom cluster was created to extract SST data on a loop from HadISST and Pathfinder raster layers corresponding to each reef polygon. A cluster was used to run the loop in parallel because of the significant time it would take looping through the data one layer at a time. However, for smaller dataset, a simple forloop will also accomplish the same goal (both methods are included in the code).
HadISST reports monthly SSTs at 1\(^\circ\) resolution. Data can be accessed here. According to their website:
“HadISST uses reduced space optimal interpolation applied to SSTs from the Marine Data Bank (mainly ship tracks) and ICOADS through 1981 and a blend of in-situ and adjusted satellite-derived SSTs for 1982-onwards.”
Figure 2 | Mean SST across coral reefs sites at each monthly sampling event (HadISST dataset) from 1870 to 2019. Year is represented by colour of each line, changing from blue to red in more recent years. Maximum SST generally occurs for the region between August and October and the minimum SST occurs between January and March.
Figure 3 | Annual mean SST (HadISST) across reef sites (black line - as calculated using the geom_smooth function fit with a general addative model) and 95% confidence interval (grey ribbon). The blue line represents the annual minimum SST across sites and the red line depicts the maximum SST across sites per year. The grey horizontal dotted line represented the overall mean SST of the full dataset, and the grey verticle line denotes when the subset of data matching the Pathfinder SST begins.
Pathfinder reports SST twice daily (night and day) at 4km resolution via NOAA National Centers for Environmental Information (NCEI). Data can be accessed here. According to their website:
“L3C is generated with measurements combined from a single instrument into a space-time grid. The dataset was computed with data from the AVHRR instruments on board NOAA’s polar orbiting satellite series using an entirely modernized system based on SeaDAS (version 6.4).”
For ease of analysis, monthly mean SSTs per pixel were calculated from the Pathfinder data and saved as a new netCDF file for all downstream analyses.
Figure 4 | Mean SST across coral reefs sites at each monthly sampling event (Pathfinder dataset) from 1870 to 2019. Year is represented by colour of each line, changing from blue to red in more recent years. Maximum SST generally occurs for the region between August and October and the minimum SST occurs between January and March.
Figure 5 | Smoothed annual mean SST (Pathfinder) across reef sites (black line) and 95% confidence interval (grey ribbon). The blue line represents the annual minimum SST across sites and the red line depicts the maximum SST across sites per year.
Here, I have plotted the same SST trend on reefs extracted from both the HadISST (Figure 3) and the Pathfinder (Figure 5) datasets for comparison of recorded temperature values. The HadISST dataset is plotted in the background in lighter colours and Pathfinder is plotted in darker colours on top. Since the Pathfinder data has a finer resolution, differences between absolute temperatures is expected. However, overall mean SST recorded on reefs is similar between the two datasets (dotted line).
A simple linear model was applied to each grid through time using a forloop to calculate the slope of SST change. Plots below are adjusted to show slope of \(^\circ\)C per decade for each timespan. Additionally, the HadISST dataset was subset to to include the same time range available for Pathfinder for comparison between the two datasets.
Figure 6 | Change in SST (\(^\circ\)C / decade) over the timespand of the HadISST dataset (1870 - 2019) and the resulting significance of the regression (B). The average temperature change for the entire region is 0.05 (\(\pm\) 0.022).
Figure 7 | Change in SST (\(^\circ\)C / decade) over the subset timespand of the HadISST dataset (subset: 1981 - 2019) (A) and the resulting significance of the regression (B). The average temperature change for the entire region is 0.17 (\(\pm\) 0.088).
Figure 8 | Change in SST (\(^\circ\)C / decade) over the timespand of the Pathfinder dataset (1981 - 2019) and the resulting significance of the regression (B). The average temperature change for the entire region is 0.22 (\(\pm\) 0.135).
Figure 9 | Maximum SST (\(^\circ\)C) recorded in the entire HadISST dataset (from 1870 to 2019) within each grid (A). The year (B) and month (C) in which each maximum SST was observed is also depicted.
Figure 10 | Maximum SST (\(^\circ\)C) recorded in the subset HadISST dataset (1870 - 2019) within each grid (A). The year (B) and month (C) in which each maximum SST was observed is also depicted.
Figure 11 | Maximum SST (\(^\circ\)C) recorded in the subset Pathfinder dataset (1981 - 2019) within each grid (A).
Figure 12 | Minimum SST (\(^\circ\)C) recorded in the entire HadISST dataset (from 1870 to 2019) within each grid (A). The year (B) and month (C) in which each minimum SST was observed is also depicted.
Figure 13 | Minimum SST (\(^\circ\)C) recorded in the subset HadISST dataset (1870 - 2019) within each grid (A). The year (B) and month (C) in which each minimum SST was observed is also depicted.
Figure 14 | Minimum SST (\(^\circ\)C) recorded in the Pathfinder dataset (1870 - 2019) within each grid (A).
Here, I plan to work on binning the reefs into subregions (like in Muñiz-castillo et al 2019) for analyses of SST trends (minimum, maximum, mean, change over time) by these ecoregions.
Another thing to note, I did not crop reefs originally with these shapefiles so I have a few on the western coast of Panama (for example) that technically do not fall within the Caribbean proper. Thoughts on if I should redo all the SST extractions (Figures 2-5) clipping reef locations with these shapefiles?
## OGR data source with driver: ESRI Shapefile
## Source: "/Users/colleen/Dropbox/Git/CaribbeanSST/data/EcoRegions", layer: "Caribbean_ecoregions"
## with 16 features
## It has 9 fields
Figure 14 | Caribbean ecoregions (A) as established by Spalding et al 2007 included in this analysis and the associate reef locations (B). All marine ecoregion shapefiles and accompanying manuscript can be accessed here. Based on reef selection at the start of the analysis, both the Bermuda and Southern Gulf of Mexico regions have been excluded from the analysis and reefs along the western coast of Central America have been excluded with these shapes.
Figure 15 | Mean SST across coral reefs within each Caribbean Ecoregion at monthly sampling event (HadISST dataset) from 1870 to 2019. Year is represented by colour of each line, changing from blue to red in more recent years.
Figure 16 | Annual mean SST (HadISST) recorded on reefs within each ecoregion (black line - as calculated using the geom_smooth function fit with a general addative model) and 95% confidence interval (grey ribbon). The blue line represents the annual minimum SST across sites within a specific ecoregion and the red line depicts the maximum SST across sites within an ecoregion per year. The grey horizontal dotted line represented the overall mean SST across all reefs within the Caribbean.
Last update was 2020-08-23
## R version 3.5.1 (2018-07-02)
## Platform: x86_64-apple-darwin15.6.0 (64-bit)
## Running under: macOS High Sierra 10.13.6
##
## Matrix products: default
## BLAS: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRblas.0.dylib
## LAPACK: /Library/Frameworks/R.framework/Versions/3.5/Resources/lib/libRlapack.dylib
##
## locale:
## [1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
##
## attached base packages:
## [1] grid stats graphics grDevices utils datasets methods
## [8] base
##
## other attached packages:
## [1] repmis_0.5 plotly_4.9.0 gganimate_1.0.6
## [4] fields_10.3 maps_3.3.0 spam_2.2-2
## [7] dotCall64_1.0-0 binr_1.1 RColorBrewer_1.1-2
## [10] xts_0.12-0 zoo_1.8-6 forcats_0.4.0
## [13] stringr_1.4.0 dplyr_0.8.3 purrr_0.3.3
## [16] readr_1.3.1 tidyr_1.0.0 tibble_2.1.3
## [19] tidyverse_1.3.0 cowplot_1.0.0 ggplot2_3.2.1
## [22] rgdal_1.4-4 maptools_0.9-5 viridis_0.5.1
## [25] viridisLite_0.3.0 raster_2.9-23 sp_1.3-1
## [28] ncdf4_1.16.1 sf_0.7-4
##
## loaded via a namespace (and not attached):
## [1] colorspace_1.4-1 ellipsis_0.3.0 class_7.3-15
## [4] fs_1.3.1 rstudioapi_0.10 farver_2.0.1
## [7] fansi_0.4.1 lubridate_1.7.4 xml2_1.2.2
## [10] splines_3.5.1 codetools_0.2-16 R.methodsS3_1.8.0
## [13] knitr_1.25 zeallot_0.1.0 jsonlite_1.6
## [16] Cairo_1.5-10 broom_0.5.2 dbplyr_1.4.2
## [19] R.oo_1.23.0 rgeos_0.4-3 shiny_1.4.0
## [22] compiler_3.5.1 httr_1.4.1 backports_1.1.5
## [25] Matrix_1.2-17 assertthat_0.2.1 fastmap_1.0.1
## [28] lazyeval_0.2.2 cli_2.0.1 later_1.0.0
## [31] tweenr_1.0.1 htmltools_0.4.0 prettyunits_1.0.2
## [34] tools_3.5.1 gtable_0.3.0 glue_1.3.1
## [37] Rcpp_1.0.3 cellranger_1.1.0 vctrs_0.2.1
## [40] nlme_3.1-140 transformr_0.1.2.9000 crosstalk_1.0.0
## [43] xfun_0.8 rvest_0.3.5 mime_0.7
## [46] lpSolve_5.6.15 lifecycle_0.1.0 scales_1.1.0
## [49] hms_0.5.3 promises_1.1.0 yaml_2.2.0
## [52] gridExtra_2.3 stringi_1.4.5 e1071_1.7-2
## [55] rlang_0.4.2 pkgconfig_2.0.3 evaluate_0.14
## [58] lattice_0.20-41 htmlwidgets_1.3 labeling_0.3
## [61] tidyselect_0.2.5 plyr_1.8.5 magrittr_1.5
## [64] R6_2.4.1 magick_2.2 generics_0.0.2
## [67] DBI_1.0.0 mgcv_1.8-28 pillar_1.4.3
## [70] haven_2.2.0 foreign_0.8-71 withr_2.1.2
## [73] units_0.6-3 modelr_0.1.5 crayon_1.3.4
## [76] KernSmooth_2.23-15 rmarkdown_1.16 progress_1.2.2
## [79] readxl_1.3.1 data.table_1.12.2 reprex_0.3.0
## [82] digest_0.6.23 classInt_0.3-3 xtable_1.8-4
## [85] R.cache_0.14.0 httpuv_1.5.2 R.utils_2.9.2
## [88] munsell_0.5.0